Copyright: Copyright (c) Baltic Solutions, 1997


ColMemo unit

Welcome to ColorMemo 2.0 help file.

Components

TColorMemo

Extra

Color Rules Editor

Runtime Editing of Rules

Objects

TColorRule

TDrawRules

THotSpot

Types

ABeginEndDescr

AKeyDescr

TBeginEndDescr

TColorRuleClass

TDrawEvent

THotSpotClickEvent

TKeyDescr

TKeyDrawEvent

TKeyDrawingType

TNotifyEvent

Constants

BEG_END_CNT

BEG_END_SZ

Colors

ColorValues

HandCursor

Important Note !

So far this component is for Windows 95 / NT 4.0 only. Don't worry, it won't hurt your computer on Window NT 3.x - it just won't do any color coding.

If we'll get enought requests for 16 bit version, we'll release it, so place your votes.


Color Rules Editor

Here's how it looks and acts like. Try clicking on particular interface element to see why it's here and what it means. Go ... do it ...

Got any clues ?

The right part of editor lets you :

- add new rule to the list of them at the top the window,

- delete one or all rules,

- set a type for rule,

- save, cancel, apply your changes

The left part of it lets :

- Set the properties for selected rule acording to it's type.


Apply Button
Applies all changes to ColorMemo control wihout

closing the editor window.That way you can see you

changes imediately, just make sure that ColorMemo

control that lies under the editor window is "vissible".


Cancel Button
Closes editor window and discards all changes made in it.


Delete All Button
Deletes all rules at once.

Think twice before clicking on it.


List of Rules
List of rules. You must select a rule to be able

to change it's type bellow or properties at the right.


Type of Rule
This is where you set the type of rule

 that is currently selected above.


OK Button
Same as "Apply" but also closes editor.

Applies all changes to ColorMemo control.


New Button
This button adds new empty rule to the list above.


Delete Button
Deletes particular rule from the list above.


TColorRule object

Properties

Unit

ColMemo

Description

This is the main object that holds rule information and controls the coloring of your text.

Usually you won't need to know it, but sometimes ( if needed at runtime ) you want to read some information from it ( like list of keywords ) or specify rule information in order to customize coloring of your text.

Examining Drawing types should help learning inners of ColorMemo more quickly.


Keywords/Markers list
This is where you type in your keywords,

markers and acompanying color for them.

Be aware that by changing type or rule

you change the actual property behind this

control, so all entered text "dissapiers".

For new type you must enter new data.

But if you change back to old type you'll

see that all data was saved.

This is also possible at runtime. You enter

two lists of keywords and by changing type

of rule actually have two rules that can be used

separately. Try it ...


TColorRule - Properties
Properties

 Run-time only	 Key properties

DefKeyColor

Enabled

IntChar

KeyBegEndLst

KeyBrushColor

KeyCase

KeyDrawingType

KeyLineEndLst

KeyMaxHeight

KeySelColor

Keywords

MaxBegEndDescr

PartWord

ZOrder


Brush Color
This is where you specify background or

brush color for you rule. All kewords defined

for this rule will be drawn using this brush.

You can't ( so far ) specify different brush

color for each keyword.


Default Color
This is where you specify default

color for keywords of this rule.

If no color is defined with keyword

than this color will be used.


Key Max Lines
Key Max Lines is used only for "Key Show"

type of rules. It tells how much lines ColorMemo

should "look" before/after visible area of text

when trying to figure keywords. This is needed

because sometime "keywords" can be several

words/lines long and parts of it can be on

unvisible part of memo control.


Z-Order editor
Z-Order specifies a priority to certain

text piece of each rule. The bigger the

number the bigger the priority. This means

that it will have "more rights" to color this

piece of text ro even single character.


Key Case Sensitive
Key Case Sensitive is used only for "Key Show"

type of rules. It tells whether particular keyword

must be drawn if case of any it's character is

not the same as the case of the same character in

keywords list.


Part Word Searching
Part Word Searching is used only for "Key Show"

type of rules. If checked it tells that keywords

that actually are parts of other words must be

also colored.


Rule Enabled
It's simple .. rules can be either

enabled or disabled and thus have

any efect on your text or not.


DefKeyColor property

Applies to

TColorRule object

Declaration

property DefKeyColor: TColor;

Description

This is a default key color that will be used for all colorings if no color is specified in list of keywords/markers.


Enabled property

Applies to

TColorRule object

Declaration

property Enabled: Boolean;

Description

This tells is this rule enabled or not. Disabled rules doesn't participate in text coloring proccess.

But you can turn then on and off at any time...


IntChar property

Applies to

TColorRule object

Declaration

property IntChar: String;

Description


KeyBegEndLst property

Applies to

TColorRule object

Declaration

property KeyBegEndLst: TStrings;

Description

This property holds a list of begin/end pairs of markers for dtBeginEnd type of drawing along with a color for it. all this is divided by ";" character.

The can be lot's of pairs like these :

{;}

<;>;blue

(*;*);gray

As you see - marker can be not only one character but a set of them like in "(*" case.


KeyBrushColor property

Applies to

TColorRule object

Declaration

property KeyBrushColor: TColor;

Description

This is actualy a background color for particular rule. The default is clWindow.


KeyCase property

Applies to

TColorRule object

Declaration

property KeyCase: Boolean;

Description

If KeyDrawingType is dtKeyShow than this is used to determine - should control be case sensitive when highlighting KeyWords.


KeyDrawingType property

Applies to

TColorRule object

Declaration

property KeyDrawingType: TKeyDrawingType;

Description

The value of this property determines how memo will try to color it's text when following particular rule.

 - If it's dtBeginEnd then all the text between Begin and End markers specified in KeyBegEndLst is drawn in your colors.

 - If it's dtKeyShow then all the words that are in Keywords list will be drawn in your colors.

 - If it's dtEventDraw than component gives you an oportunity to control what and how will be drawn. With this method in use , for each page of text OnDraw event is called.

 - If it's dtBeginLineEnd then all text that is after any of starting markers defined in KeyLineEndLst will be drawn in a colors of your choise.

For more information you can go to the page showing Color Rules Editor.


KeyLineEndLst property

Applies to

TColorRule object

Declaration

property KeyLineEndLst: TStrings;

Description

This property holds a list of begin markers for dtBeginEndLine type of drawing along with a color for it. all this is divided by ";" character.

The can be lot's of lines like these :

//

\\;

!*;gray

As you see - marker can be not only one character but a set of them like in "//" case.


KeyMaxHeight property

Applies to

TColorRule object

Declaration

property KeyMaxHeight: Integer;

Description

The maximum height of Keyword measured in number of lines.


KeySelColor property

Applies to

TColorRule object

Declaration

property KeySelColor: TColor;

Description

The color that text is colored in when selceted. This is only for text that colored by ColorMemo, not for normal text.


Keywords property

Applies to

TColorRule object

Declaration

property Keywords: TStrings;

Description

This property holds a list of keywords for dtKeyShow type of drawing along with a color for it. all this is divided by ";" character.

The can be lot's of lines like these :

begin

end;

procedure;blue


MaxBegEndDescr property

Applies to

TColorRule object

Declaration

property MaxBegEndDescr: Integer;

Description

Maximum number of begin/end pairs

Run-time only


PartWord property

Applies to

TColorRule object

Declaration

property PartWord: Boolean;

Description

This is usefull when you need to color only part of words, which themselfs aren't keywords.

When PartWord is TRUE the "var" piece of word variable will be colored, if FALSE it won't


ZOrder property

Applies to

TColorRule object

Declaration

property ZOrder: Byte;

Description

This property tells which rule should be used when several rules try color the same character of text ( one particular character or an overlaping part when two set of characters are efected by several rules).

In that case ColorMemo will use the rule with the bigger ZOrder. So it can be described as a priority to color particular piece of text. The bigger the number the higher the priority.


TDrawRules object

Properties	Methods

Unit

ColMemo

Description

   TDrawRules = class ( TCollection)

This is a type of ColorRules property, which is actually just a collection of TColorRule objects and an editor for them. Explore it's properties to know how it works and can be used at runtime.


TDrawRules - Properties
Properties

 Run-time only	 Key properties

CMemo

Items

UpdateRules


TDrawRules - Methods
Methods

 Key methods

Create

Add


CMemo property

Applies to

TDrawRules object

Declaration

property CMemo: TColorMemo;

Description

It is  similar to Parent property that most objects have. It tells which ColorMemo owns/uses this set of rules. Usually you won't use it for your work.

Run-time only

Read-only


Items property

Applies to

TDrawRules object

Declaration

property Items: TColorRule;

Description

This is where all rules are stored. To access them treat Items as an array of TColorRule's

Run-time only


UpdateRules property

Applies to

TDrawRules object

Declaration

property UpdateRules: Boolean;

Description

This is for internal use only. You won't need it.

Run-time only


Create method

Applies to

TDrawRules object

Declaration

constructor Create(CLMM: TColorMemo; RuleClass: TColorRuleClass);

Description

Creates an instance of TDrawRules

P.S.    TColorRuleClass = class of TColorRule;


Add method

Applies to

TDrawRules object

Declaration

function Add: TColorRule;

Description

Adds/Creates an empty rule without any rule information, just a drawing type set to dtBeginEnd. You must fill it's properties as shown in this runtime use sample


THotSpot object

Properties

Unit

ColMemo

Description

This is a type of ColorMemos property HotSpot. To simply activate it set it's property Active to TRUE  and begin and end markers to define hotspot text. Then when users clicks on particular hotspot an OnHotSpotClick event is fired.


THotSpot - Properties
Properties

 Run-time only	 Key properties

Active

BeginChar

Color

EndChar

MarkerColor

Underlined


Active property

Applies to

THotSpot object

Declaration

property Active: Boolean;

Description

Simply setting this to TRUE you activate HotSpot feature. In other words hotspot highlighting and onHotSpot event firing is done only when Active is TRUE.


BeginChar property

Applies to

THotSpot object

Declaration

property BeginChar: Char;

Description

Specifies the starting marker for HotSpot text. By default is character with #30 code. That way markers ocupy very litle screen space, but are hard to enter in design time. If you prefer to hard code these markers in pascal code then use it. If not, then chose another one and enter as the value of this property.


Color property

See also

Applies to

THotSpot object

Declaration

property Color: TColor;

Description

This is a color for HotSpot to be drawn. Default value is clBlue , just like in HTML browsers.


Color property - See also
See also

<<< See also of Color property >>>


EndChar property

Applies to

THotSpot object

Declaration

property EndChar: Char;

Description

Specifies the ending marker for HotSpot text. By default is character with #31 code. That way markers ocupy very litle screen space, but are hard to enter in design time. If you prefer to hard code these markers in pascal code then use it. If not, then chose another one and enter as the value of this property.


MarkerColor property

Applies to

THotSpot object

Declaration

property MarkerColor: TColor;

Description

This property controls apearance of markers before and after actual HotSpot text. By setting it to clWindow ( default value ) you can "hide" them, so only meaningful text of HotSpot is visible.

In that case , if you change the backgroung color of ColorMemo be sure to change this color as well.


Underlined property

Applies to

THotSpot object

Declaration

property Underlined: Boolean;

Description

Defines either HotSpot should be underlined ( like in HTML, WinHelp) or not. It's doesn't affect functionality, just visual apearance of text.


TColorMemo component

Properties	Methods	Events

Unit

ColMemo

What is this all about ?

When developing HtmlReport we encountered a need to "color code" html tags. That pushed us to development of memo component that would be able to "color" the text it contains. We felt a need in it because RichEdit that comes with Delphi 2.0 is just too much for us and requires a DLL to be installed ( and the right version of it ). Not to mention that it's too complex for novice users and not flexible enough for advanced ones.

We tried to make it very simple and easy to use so novice users can "plug&play" it into their application without any painful reading of manuals. And at the same time it should allow more advanced user to implement any imaginable set of "color coding" rules. Yes, we know it's hard to achieve both goals, and it's up to you judge how we succeeded.

Description

TColorMemo is a component derived from TMemo, thus it has all the properties and functionality of normal TMemo. The main extra feature it has is Color Coding.

This is useful when implementing HTML editors and coloring other text where starting and ending markers are available. Or just give us a starting marker like "//" and say that we must color everything till the end of line in your color. And we'll do it ... That's how comments a done.

If you know the keywords for your "language", then you can do it the way Delphis own editor is implemented. You provide a list of "keywords" and TColorMemo draws them in a color of your choice. Very useful for editors of scripting languages or other simple text that has a predefined set of words to highlight. And in as much color as you want.

And of course there are some events that lets you control all this proccess manualy or even parse your text on your own and tell us what text and how to color. It's that simple.

Also there are some new properties and methods to control the position of cursor. It also simplifies counting of lines ( visible or not ) and allows to control scrolling of text.


TColorMemo - Properties
Properties

 Run-time only	 Key properties

Canvas

ColorLimMax

ColorRules

CurrentLine

CurrentPosition

HotSpot

LinesVisible

MaxLinesVisible

RedrawAlways

TopLine


TColorMemo - Methods
Methods

 Key methods

GetMaxLines

ScrollBy


TColorMemo - Events
Events

 Key events

OnDraw

OnDrawKey

OnHotSpotClick

OnHScroll

OnVScroll


Canvas property

Applies to

TColorMemo component

Declaration

property Canvas: TCanvas;

Description

Canvas for drawing on controls surface.

Protected

Read-only


ColorLimMax property

Applies to

TColorMemo component

Declaration

property ColorLimMax: Integer;

Description

There you can set the maximum size of A array used in OnDraw event. Actually it means : how many colored areas can be set in OnDraw event


ColorRules property

Applies to

TColorMemo component

Declaration

property ColorRules: TDrawRules;

Description

Not much to talk here, as all it does is invokes Color Rules Editor.

It can also be accessed at runtime to add/remove/edit rules dynamicaly.


CurrentLine property

Applies to

TColorMemo component

Declaration

property CurrentLine: Integer;

Description

Check the value of this property and you'll get the line number (first line = 0) containing the cursor.

If you change the value of this property, the cursor is placed at the start of the specified line. If greater than the last line, the cursor goes to the start of the last line. You can deliberately set a large value to get to the last line of the control.

Run-time only


CurrentPosition property

Applies to

TColorMemo component

Declaration

property CurrentPosition: Integer;

Description

When read, returns the character position (before first char = 0) of the cursor within the line containing the cursor. If you change the value of this property , component puts the cursor at the specified character position on the current line (0 = before first character). Tabs (if used) are treated as single characters. If the specified position is beyond the end of the line, the cursor goes to the end of the line. You can  deliberately set a large value to get to the end of each line.

Run-time only


HotSpot property

Applies to

TColorMemo component

Declaration

property HotSpot: THotSpot;

Description

This let's you define the settings for HotSpot feature and activate it or not.

More info can be found on HotSpot object page.


LinesVisible property

Applies to

TColorMemo component

Declaration

property LinesVisible: Integer;

Description

Holds the number of lines that are currently visible. If the memo height or font properties are changed, you should call the GetMaxLines method (see below) before reading this property.

Run-time only

Read-only


MaxLinesVisible property

Applies to

TColorMemo component

Declaration

property MaxLinesVisible: Integer;

Description

Tells the maximum number of lines that can be displayed in the memo before it scrolls. If the memo height or font properties are changed, you should call the GetMaxLines method (see below) before reading this property.

Run-time only

Read-only


RedrawAlways property

Applies to

TColorMemo component

Declaration

property RedrawAlways: Boolean;

Description

When set TRUE tells that every time user changes text in memo control it's needs to be completely redrawn. Usually it's not needed, and causes some flickering to apear, but in some cases it should be set to TRUE.


TopLine property

Applies to

TColorMemo component

Declaration

property TopLine: Integer;

Description

Holds the line number (first line = 0) of the top line currently displayed.

Run-time only

Read-only


GetMaxLines method

Applies to

TColorMemo component

Declaration

procedure GetMaxLines;

Description

Recalculates the number of lines that can be accommodated in the memo. You only need to call this if you change the height of the memo or change the font properties.


ScrollBy method

Applies to

TColorMemo component

Declaration

procedure ScrollBy(X: Integer; Y: Integer);

Description

Scrolls the control by X character positions left or right and Y lines up or down. Use negative values to scroll the other way.


OnDraw event

Applies to

TColorMemo component

Declaration

property OnDraw: TDrawEvent;

Description

This is the event that should be assigned when a rule of type dtEventDraw is used.

It allows to parse your text on your own and tell ColorMemo exact places to be colored.For details on how it should be written check TDrawEvent type description.


OnDrawKey event

Applies to

TColorMemo component

Declaration

property OnDrawKey: TKeyDrawEvent;

Description

The event that is called when ColorMemo want's to draw particular keyword. Using this event you can gain additional flexibility in coloring of Keywords because it's you who draws each keyword. Use your imagination. If this event isn't assigned than "default coloring" specified in ColorRules is taken and implemented.


OnHotSpotClick event

Applies to

TColorMemo component

Declaration

property OnHotSpotClick: THotSpotClickEvent;

Description

The event that is fired for every click on HotSpot.


OnHScroll event

Applies to

TColorMemo component

Declaration

property OnHScroll: TNotifyEvent;

Description

An event that is generated when you click on the control's horizontal scroll bar and again when the mouse is released.


OnVScroll event

Applies to

TColorMemo component

Declaration

property OnVScroll: TNotifyEvent;

Description

An event that is generated when you click on the control's vertical scroll bar and again when the mouse is released.


ABeginEndDescr type

Unit

ColMemo

Declaration

type ABeginEndDescr = Array[0 . . 100] of TBeginEndDescr;

Description

This record is used to describe Begin/End markers.

The KeyBegEndLst and KeyLineEndLst lists are used only to specify parameters,

and are transformed to array of type TBeginEndDescr.

The size of array is specified in BEG_END_CNT.


AKeyDescr type

Unit

ColMemo

Declaration

type AKeyDescr = Array[0 . . 8000] of TKeyDescr;

Description

The array used in TDrawEvent to determine areas to be colored.

It's dynamic. It's size is specified in ColorLimMax property

AKeyDescr is a type that simplifies calls to dynamic array "A".


TBeginEndDescr type

Unit

ColMemo

Declaration

type TBeginEndDescr = record

CBegin, CEnd: Array[0..BEG_END_SZ] of Char;

KeyColor: TColor;

Pos: PChar;

      end;

Description

This record is used to describe Begin/End markers.

The KeyBegEndLst and KeyLineEndLst lists are used only to specify parameters,

and are transformed to array of type TBeginEndDescr.

The size of array is specified in BEG_END_CNT.


TColorRuleClass type

Unit

ColMemo

Declaration

type TColorRuleClass = class of TColorRule;

Description

Class of TColorRule. Simple, isn't it ?


TDrawEvent type

Unit

ColMemo

Declaration

type TDrawEvent = procedure(Sender: tObject; FromPos: PChar; var A: array of tKeyDescr; var ItemsCount: Integer) of object;

Description

This is the procedure that should be written to parse your text. Actually only a visible part of text.

It's rather slow method to color your text but sometimes it may help.

This procedure is called every time something changes on a visible part of memo control, i.e. user types something, scrolls text to any direction, etc.  As this accurs ColorMemo calls this event and passes all visible text as PChar buffer in FromPos. Then it must be parsed and the output of this should be array of TKeyDescr stored in A. This means that you "tell" a set of "take this color and draw from here to there" information, because TKeyDesc holds Left, Right possitions ( counting from FromPos ), color, and some other information for piecies to be drawn differently than all other text.

Example :

  A[1].Left  := 3;

  A[1].Right := 6;

  A[1].KeyColor := clGreen;

  A[1].ZOrder := 1;

The ItemsCount  variable must contain a size of A array minus 1.

Note : Please remember that ColorLimMax property of ColorMemo must contain a maximum possible size A array.This is needed ... so ColorMemo knows how big array it should pass to your event and expect to be returned.


THotSpotClickEvent type

Unit

ColMemo

Declaration

type THotSpotClickEvent = procedure(Sender: TObject; const SRC: String) of object;

Description

The type of event that is called when user clicks on "hotspot".  SRC holds the text of hotspot.


TKeyDescr type

Unit

ColMemo

Declaration

type TKeyDescr = record

Left, Right: Integer;

KeyColor: TColor;

ZOrder: Byte;

DrawKey: Boolean;

     end;

Description

The structure used to describe that the interval Left ....Right of a given string, that must be drawn in KeyColor color.


TKeyDrawEvent type

Unit

ColMemo

Declaration

type TKeyDrawEvent = procedure(Canvas: TCanvas; const PKey: String; Rect: TRect; KColor: TColor) of object;

Description

This is the type of procedure that is called when OnDrawKey event is assigned.

PKey of course is the keyword that should be drawn by this procedure on Canvas and in rectangle specified in Rect . The defaul ( rule specified ) color for that is given in KColor parameter.

Simple

  Canvas.TextOut( Rect.Left, Rect.Top, PKey);

will do the default coloring.Try changing Canvas properties and you can achieve bold, italic, underline, etc.

Or you can even draw some pictures instead of certain keywords. What about graphics simbols instead of "do", "re", "mi" .... Your customers will like it ...


TKeyDrawingType type

Unit

ColMemo

Declaration

type TKeyDrawingType = (dtKeyShow, dtEventDraw, dtBeginEnd, dtBeginLineEnd);

Description

The drawing types that are valid to specify for TColorRule object.

It's used by Color Rule Editor and possibly by you at runtime.


TNotifyEvent type

Unit

ColMemo

Declaration

type TNotifyEvent = procedure(Sender: TObject) of object;

Description

A type of simple notification event that is used in ColorMemo. No important data is passed when using these events.


BEG_END_CNT

Declaration

const BEG_END_CNT = 40

Description

The maximum number of Begin/End pairs


BEG_END_SZ

Declaration

const BEG_END_SZ = 6

Description

The maximum size of one Begin or End marker


Colors constant

Declaration

const Colors: array [1..16] of string [7] = ('BLACK', 'MAROON', 'GREEN', 'OLIVE', 'NAVY', 'PURPLE', 'TEAL', 'GRAY', 'SILVER', 'RED', 'LIME', 'YELLOW', 'BLUE', 'FUCHSIA', 'AQUA', 'WHITE')

Description

These are the accepted color values that can be entered in Color Rules Editor.


ColorValues constant

Declaration

const ColorValues: array [1..16] of TColor = (clBLACK, clMAROON, clGREEN, clOLIVE, clNAVY, clPURPLE, clTEAL, clGRAY, clSILVER, clRED, clLIME, clYELLOW, clBLUE, clFUCHSIA, clAQUA, clWHITE)

Description

When you use any color in Color Rules editor, then these are the actual values used by ColorMemo.


HandCursor

Declaration

const HandCursor = 1

Description

This is the ID that we used for HandCursor resource when implementing HotSpot feature.

Sometimes it can conflict with your own resources. In that case just change it to the value of your choise.


Runtime editing of Rules

Before using ColorMemos rules at runtime you'll need to know it's architecture. So first of all explore TDrawRules object, TColorRule object, THotSpot object.

Example that should say enough to most of you :

{ ------------------------------------------------------------------------------------}

var M : TColorMemo;

  M.colorRules.Add;

  M.colorRules.Items[0].KeyBegEndLst.Add('<;>;Blue');

  M.colorRules.Items[0].KeyBegEndLst.Add('<a ;>;Blue');

  M.colorRules.Items[0].KeyBegEndLst.Add('<tab ;>;GRAY');

  M.colorRules.Items[0].KeyBegEndLst.Add('";";aqua');

  M.colorRules.Items[0].KeyBegEndLst.Add('<;>');

  M.colorRules.Add;

  M.colorRules.Items[1].KeyDrawingType := dtKeyShow;

  M.colorRules.Items[1].Keywords.Add('font;blue');

  M.colorRules.Items[1].Keywords.Add('size;gray');

  M.colorRules.Items[1].ZOrder := 1;

  M.colorRules.Items[1].PartWord := False;

  M.colorRules.Items[1].KeyCase := True;

  M.colorRules.Add;

  M.colorRules.Items[2].KeyDrawingType := dtBeginLineEnd;

  M.colorRules.Items[2].KeyLineEndLst.Add('//;Yellow');

  M.colorRules.Items[2].ZOrder := 2;

{ ------------------------------------------------------------------------------------}


HelpScribble

HelpScribble is a help authoring tool written by Jan Goyvaerts. This help file was created with the unregistered version of HelpScribble, which is why you can read this ad. Once the author of this help file is so honest to register the shareware he uses, you will not see this ad again in his help files.

Recompiling the help project with the registered version is all it takes to get rid of this ad.

HelpScribble is a stand-alone help authoring tool. It does not require an expensive word processor. (Only a help compiler as Microsoft likes keeping the .hlp format secret. Not my fault.)

Here are some of HelpScribble's features:

•	The Setup program will properly install and uninstall HelpScribble and all of its components, including registry keys.

•	Create, edit and navigate through topics right in the main window. No need to mess with heaps of dialog boxes.

•	All topics are listed in a grid in the main window so you won't lose track in big help projects. You can even set bookmarks.

•	Use the built-in Browse Sequence Editor to easily create browse sequences.

•	Use the built-in Window Editor to change the look of your help window and create secondary windows.

•	Use the built-in Contents Editor to create Windows 95-style contents files. Works a lot better than Microsoft's HCW.

•	No need to mess with Microsoft's SHED: use the built-in SHG Editor to create hotspot bitmaps. Draw your hotspots on the bitmap and pick the topic to link to from the list.

•	With the built-in Macro Editor you can easily compose WinHelp macros whenever needed. It will tell you what the correct parameters are and provide information on them.

•	If you have a problem, just consult the online help. The help file was completely created with HelpScribble, of course.

•	HelpScribble is shareware. However, the unregistered version is not crippled in any way. It will only add a small note to your help topics to encourage you to be honest and to register the shareware you use.

These options are very interesting for Delphi and C++Builder developers:

•	If you are a component writer, use the Delphi Parser to build an outline help file for your component. Just fill in the spaces and you are done. HelpScribble can also extract the comments from your source file and use them as the default descriptions.

•	If you are an application writer, HelpScribble provides you with a property editor for the HelpContext property. You can select the topic you need from a list of topic titles or simply instruct to create a new topic. No need to remember obscure numbers.

•	The property editor also provides a tree view of all the components on your form and their HelpContext properties. This works very intuitively. (Much nicer than those help tools that simply mess with your .dfm files.)

•	HelpScribble can perform syntax highlighting on any Delphi source code in your help file.

HelpScribble is shareware, so feel free to grab your copy today from my web site at http://www.tornado.be/~johnfg/